/**
 * 文件名：@DownloadView.java <br/>
 * 包名：cn.efunbox.afw.web.mvc.springmvc.view <br/>
 * 项目名：afw-mvc-web <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.web.mvc.springmvc.view;

import java.net.URLEncoder;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import cn.efunbox.afw.web.util.AfwWebConstant;

/**
 * 类名：DownloadView  <br />
 *
 * 功能：
 *
 * @author xtwin <br />
 * 创建时间：2015年12月3日 下午6:17:38  <br />
 * @version 2015年12月3日
 */
public class DownloadView extends StreamView {

	// 默认文件名
	protected String fileName = "download.file";
	
	// 在模型中，存放文件名使用的字段名
	protected String contextFileNameField = AfwWebConstant.KEY_DOWNLOAD_FILE_NAME_IN_CONTEXT;
	
	/**
	 * 功能: <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015年12月3日 下午6:18:43<br/>
	 * 
	 * @param model
	 * @param request
	 * @param response
	 * @throws Exception <br/>
	 * @see cn.efunbox.afw.web.mvc.springmvc.view.StreamView#renderMergedOutputModel(java.util.Map, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	 */
	@Override
	protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request, HttpServletResponse response) throws Exception {
		
		// 设置文件头信息
		String fileName = (String) model.get(contextFileNameField);
		if (null == fileName) {
			fileName = this.fileName + Math.random();
		}
		
		// 放入文件名信息
		response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
		
		// 交给父类处理数据
		super.renderMergedOutputModel(model, request, response);
	}

	/**
	 * @version 2015年12月3日-下午6:19:14
	 */
	public void setFileName(String fileName) {
		this.fileName = fileName;
	}

	/**
	 * @version 2015年12月3日-下午6:19:14
	 */
	public void setContextFileNameField(String contextFileNameField) {
		this.contextFileNameField = contextFileNameField;
	}
}
